package com.ruoyi.web.es.task;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 *  <p>静态定时任务（基于注解）</p>
 *
 * @description : @Scheduled 除了支持灵活的参数表达式cron之外，还支持简单的延时操作，例如 fixedDelay ，fixedRate 填写相应的毫秒数即可。
 *                 缺点: 当我们调整了执行周期的时候，需要重启应用才能生效。 -> 为了达到实时生效的效果，可以使用接口来完成定时任务。
 * @author suqinyi
 * @Date 2022/1/10
 * 注解方式： @EnableScheduling + @Scheduled(cron = "0/10 * * * * ?")
 */
@Configuration //1.主要用于标记配置类，兼备Component的效果。
@EnableScheduling // 2.开启定时任务
public class AppTask03_annotation {

    /**
     * Cron表达式参数分别表示：
     *           秒（0~59） 例如0/5表示每5秒
     *           分（0~59）
     *           时（0~23）
     *           月的某天（0~31） 需计算
     *           月（0~11）
     *           周几（ 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT）
     */
    @Scheduled(cron = "0/10 * * * * ?")
    public void AppTask01() throws Exception {
        try {
            String urlString = "http://yourserver.com/api/endpoint";
            URL url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法为POST
            connection.setRequestMethod("POST");

            // 设置请求属性，这里设置Content-Type为application/xml
            connection.setRequestProperty("Content-Type", "application/xml");

            // 设置允许输入输出
            connection.setDoOutput(true);

            // 你的XML数据
            String xml = "<yourxml><tag>value</tag></yourxml>";

            // 写入请求体
            try (OutputStream os = connection.getOutputStream()) {
                byte[] input = xml.getBytes();
                os.write(input, 0, input.length);
            }

            // 获取响应码
            int responseCode = connection.getResponseCode();
            System.out.println("POST Response Code :: " + responseCode);

            // 根据需要处理响应内容
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // 处理响应

            }
            // 关闭连接
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
